package com.zxf.redis;

import java.io.IOException;
import java.util.HashSet;
import java.util.Set;

import org.apache.log4j.Logger;


import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisCluster;
import redis.clients.jedis.exceptions.JedisNoReachableClusterNodeException;
import sun.util.logging.resources.logging;

/**
 * redis数据源 : 集群模式
 * 
 * @Created by zyj on 2016年12月15日
 * @Package com.demo.redis
 */
public class RedisDatasource {
	private static ThreadLocal<JedisCluster> threadLocal = new ThreadLocal<>();
	private static JedisCluster jedisCluster;

	/**
	 * 获取spring中配置的jedis集群对象注入并返回
	 * 
	 * @Created by zyj on 2016年12月15日
	 * @return
	 * @Version 1.0
	 */
	public static JedisCluster getClient() {
		if (jedisCluster == null) {
			try {
				//jedisCluster = (JedisCluster) ApplicationUtils.getBean("jedisCluster");
			} catch (Exception e) {
				Logger.getLogger(RedisDatasource.class).error("获取jedis集群对象失败", e);
			}
		}
		return jedisCluster;
	}

	/**
	 * 在redis3.0集群中,调用jedis的jedisCluster.close()方法会造成集群连接关闭情况,
	 * 
	 * jedisCluster内部使用了池化技术,
	 * 
	 * 每次使用结束将自动释放资源,不需要关闭,
	 * 
	 * 如果调用close()方法后,在调用jedisCluster的api进行操作就会抛出异常.<br>
	 * 
	 * @exception JedisNoReachableClusterNodeException
	 *                (No reachable node in cluster)
	 * 
	 * @Created by zyj on 2016年12月19日
	 * @Version 1.0
	 */
	public static void close() {
		throw new JedisNoReachableClusterNodeException("No reachable node in cluster");
		// jedisCluster = threadLocal.get();
		// if (jedisCluster != null) {
		// try {
		// jedisCluster.close();
		// } catch (IOException e) {
		// Logger.getLogger(RedisDatasource.class).error("jedis集群对象关闭失败", e);
		// }
		// }
	}

	public static void main(String[] args) {
		System.out.println(0 % 2);
	}
}
